//Programa que muestra el paso de parámetros en threads
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

/* Prototipos de las funciones que ejecutan los threads */
void *func1 (void *);
// Estructura que contiene los datos a pasar como parámetros
// Un único parámetro se puede pasar directamente con el operador &
typedef struct
{
        int dato1,dato2;
}datos;

pthread_t thread1, thmain;
pthread_attr_t attr;
/* Declaración de los threads */
/*atributos de los threads*/
/* Definición de las funciones func1 */
void *func1 (void *arg)
{
    int a,b;
    datos *p= (datos *) (arg);
    pthread_t tid = pthread_self(); /*identificador de thread*/
    a=(p->dato1);
    b=(p->dato2);
    printf("Soy el thread 1 y voy a ejecutar func1 \n");
    printf("La multiplicación es %d\n",a*b);
    printf("Soy el thread 1 y he terminado de ejecutar la función 1\n");
    pthread_exit (NULL);
}

/*Función main*/
int main (void)
{
    datos param;
    param.dato1=6;
    param.dato2=8;
    thmain = pthread_self();
    pthread_attr_init (&attr);
    printf("Soy la función main y voy a lanzar el thread \n");
    pthread_create (&thread1, &attr, func1, &param);
    printf("Soy main: he lanzado el thread y termino\n");
    pthread_exit (NULL);
}

